<?php
class Controller_Categorie extends Controller_Template
{
	public function __construct()
	{
		parent::__construct();
		$this->selfModel = new Model_MapperCategorie("categorie", parent::$db);
	}

	public function index()
	{
		$pager = new Pager($this->selfModel, Config::get_slot('categories_max_page', 10), Model_TableCategorie::count());
		$pager->setQuery('getAll');
		$pager->init();
		header('Content-Type: text/html; charset=utf-8');
		require('view/categorie/index.php');
	}

        public function create()
	{
            $valid = false;
            $erreurs = array();//pour affichage des erreurs

            //affichage du formulaire
            $form = new Formulaire('categorie', '#', 'POST');

            $form->addAttribut('id', 'categorie_form');

            $libelle = new ChampText('libellecategorie', 'Libellé', true);
            $submit = new ChampSubmit('submit', 'Valider');
            $submit->addAttribut('class', 'button');

            //validateurs
            $libellevalidateur = new ValidateurText(50);
            $libelle->addValidateur($libellevalidateur);

            //modification on charge les valeurs de la catégorie
            if(isset($categorie) && !is_null($categorie))
            {
                $libelle->setValeur($categorie->getNom());
                $libelle->addAttribut('value', $categorie->getNom());
            }

            //ajout des champs au formulaire
            $form->addChamp($libelle);
            $form->addChamp($submit);

            if(isset($_POST['formid']) && !empty($_POST['formid']) )
            {
                //formulaire soumis on recharge les valeurs et on valide le formulaire
                $form->bind();

                if($form->valider() )
                {
                    //ajout de la catégorie
                    $categorie = new Model_Categorie();
                    $categorie->setId_categorie(-1);
                    $categorie->setNom($libelle->getValeur());
                    $this->selfModel->save($categorie);
                    $valid = true;
                }
                else
                {
                    //récupération des erreurs dans un tableau
                    //pour affichage dans la vue
                    foreach($form->getChamps() as $champ)
                    {
                        if($champ->isvalid == false)
                        {
                            $temp = array();
                            foreach($champ->getErreurs() as $erreur)
                            {
                                $temp[] = $erreur;
                            }
                            $erreurs[$champ->__toString()] = $temp;
                        }
                    }
                }
            }

            header('Content-Type: text/html; charset=utf-8');
            require('view/categorie/new-edit.php');
	}

	public function edit($id)
	{
		$categorie = $this->selfModel->getOne($id);
                $valid = false;
                $erreurs = array();//pour affichage des erreurs

		if(!is_null($categorie))
		{
                    //affichage du formulaire
                    $form = new Formulaire('categorie', '#', 'POST');

                    $form->addAttribut('id', 'categorie_form');
                    
                    $libelle = new ChampText('libellecategorie', 'Libellé', true);
                    $submit = new ChampSubmit('submit', 'Valider');
                    $submit->addAttribut('class', 'button');

                    //validateurs
                    $libellevalidateur = new ValidateurText(50);
                    $libelle->addValidateur($libellevalidateur);

                    //modification on charge les valeurs de la catégorie
                    if(isset($categorie) && !is_null($categorie))
                    {
                        $libelle->setValeur($categorie->getNom());
                        $libelle->addAttribut('value', $categorie->getNom());
                    }

                    //ajout des champs au formulaire
                    $form->addChamp($libelle);
                    $form->addChamp($submit);

                    if(isset($_POST['formid']) && !empty($_POST['formid']) )
                    {
                        //formulaire soumis on recharge les valeurs et on valide le formulaire
                        $form->bind();

                        if($form->valider() )
                        {
                            //modification de la catégorie
                            $categorie->setId_categorie($categorie->getId_categorie());
                            $categorie->setNom($libelle->getValeur());
                            $this->selfModel->save($categorie);
                            $valid = true;
                        }
                        else
                        {
                            //récupération des erreurs dans un tableau
                            //pour affichage dans la vue
                            foreach($form->getChamps() as $champ)
                            {
                                if($champ->isvalid == false)
                                {
                                    $temp = array();
                                    foreach($champ->getErreurs() as $erreur)
                                    {
                                        $temp[] = $erreur;
                                    }
                                    $erreurs[$champ->__toString()] = $temp;
                                }
                            }
                        }
                    }

                    header('Content-Type: text/html; charset=utf-8');
                    require('view/categorie/new-edit.php');
		}
		else
		{
			$message = "Catégorie non trouvée";
			header('Content-Type: text/html; charset=utf-8');
			require('view/erreur/show.php');
		}
	}

        public function delete($id)
	{
		$categorie = $this->selfModel->getOne($id);

		if(!is_null($categorie))
		{
                    $this->selfModel->delete($categorie);
                    header('Content-Type: text/html; charset=utf-8');
                    require('view/categorie/delete.php');
		}
		else
		{
			$message = "Catégorie non trouvée";
			header('Content-Type: text/html; charset=utf-8');
			require('view/erreur/show.php');
		}
	}
}

?>
